package com.koi.generator.service.gentable;

import com.baomidou.mybatisplus.extension.service.IService;
import com.koi.generator.pojo.GenCode;
import com.koi.pojo.gen.GenTable;
import com.koi.pojo.gen.TableColumn;
import com.koi.pojo.gen.TableData;

import java.util.List;
import java.util.Map;

/**
 * @author ･ᴗ･
 * @description [代码生成业务表-服务实现层接口]
 */
public interface GenTableService extends IService<GenTable> {

    /**
     * @description [获取指定数据库下的所有表名称及注释]
     * 使用TableData原因：查询数据库数据需要koi-model模块
     * @author ･ᴗ･
     */
    Map<String, Object> listAllTableName(TableData vo);

    /**
     * @description [导入数据]
     * @author ･ᴗ･
     */
    void importGenTable(TableData vo);

    /**
     * @description [获取当前数据库下的指定表名称及注释]
     * 使用TableData原因：查询数据库数据需要koi-model模块
     * @author ･ᴗ･
     * @param tableSchema 数据库名
     * @param tableList 生成表名集合
     */
    List<TableData> getAssignTable(String tableSchema, List<String> tableList);

    /**
     * @description [获取指定数据库和单表字段]
     * @author ･ᴗ･
     * @method getTableColumn
     * @param tableSchema 数据库名称
     * @param tableName 表名
     */
    List<TableColumn> getTableColumn(String tableSchema, String tableName);


    /**
     * @param genCodeList 生成代码数据库名称 和 表名称
     * @param type 类型 [preview-预览代码 gen-生成代码]
     * @description [通过前端生成代码]
     * @author ･ᴗ･
     */
    Map<String, Object> previewPerfectCode(List<GenCode> genCodeList, String type);

    /**
     * @param genCodeList 生成代码数据库名称 和 表名称
     * @param type 类型 [preview-预览代码 gen-生成代码]
     * @description [通过前端生成代码]
     * @author ･ᴗ･
     */
    void generatePerfectCode(List<GenCode> genCodeList, String type);

    /**
     * @description [同步数据]
     * @author ･ᴗ･
     */
    void synchronousData(String tableSchema, String tableName);
}
